<?php
/**
 * 会员收货地址控制器
 */
namespace app\index\controller;
use app\index\controller\Common;
class Address extends Common{

	/**
     * 添加收货地址
     */
    public function add(){

    	// 安全处理 
		if( !request()->isPost() ){

			$this->error('您访问的页面不存在！');

		}

		// 获取信息
		$msg = input('post.');
        
		// 验证信息
		$validate = new \think\Validate([
		    'consignee'  => 'require', 
		    'mobile' => '^1[34578]{1}[0-9]{9}$',
		    'tel' => ['regex'=>'/^(\d{3}-\d{8}|\d{4}-\d{7})$/'],
		    'email' => 'email',
		    'province' => 'number',
		    'city' => 'number',
		    'district' => 'number',
            'zipcode' => '^[1-9][0-9]{5}$',
            'address' => 'require',
            'default' => 'number'
		]);

		if (!$validate->check($msg)) {
		    $this->error( $validate->getError() );
		}

		// 拼凑数据
		$data['consignee'] = $msg['consignee'];
		$data['mobile'] = $msg['mobile'];
		$data['tel'] = $msg['tel'];
		$data['email'] = $msg['email'];
		$data['province'] = $msg['province'];
		$data['city'] = $msg['city'];
		$data['district'] = $msg['district'];
		$data['address'] = $msg['address'];
        $data['zipcode'] = $msg['zipcode'];
		$data['default'] = $msg['default'];
		$data['mid'] = session('mid');

		// 判断收货人是否已经存在
		$db = db('address');
		if( $db->where( ['consignee'=>$data['consignee'],'mid'=>session('mid') ] )->value('aid') ){

			$this->error( '你已经添加过名为"'.$data['consignee'].'"的用户，请换一个名字！' );

		}

		// 添加数据到数据库
		if( $db->strict('true')->insert( $data ) ){

			$this->success( '添加成功！',url('member/address') );

		}else{

		    $this->error( '添加失败！' );

		}
        
    }

    /**
     * 修改收货地址
     */
    public function edit(){

    	// 安全处理 
		// if( !request()->isPost() ){

		// 	$this->error('您访问的页面不存在！');

		// }

		// 获取信息
		$msg = input('post.');
		
		// 验证信息
		$validate = new \think\Validate([
		    'consignee'  => 'require', 
		    'mobile' => '^1[34578]{1}[0-9]{9}$',
		    'tel' => ['regex'=>'/^(\d{3}-\d{8}|\d{4}-\d{7})$/'],
		    'email' => 'email',
		    'province' => 'number',
		    'city' => 'number',
		    'district' => 'number',
		    'zipcode' => '^[1-9][0-9]{5}$',
            'address' => 'require',
            'default' => 'number'
		]);

		if (!$validate->check($msg)) {
		    $this->error( $validate->getError() );
		}

		// 拼凑数据
		$data['consignee'] = $msg['consignee'];
		$data['mobile'] = $msg['mobile'];
		$data['tel'] = $msg['tel'];
		$data['email'] = $msg['email'];
		$data['province'] = $msg['province'];
		$data['city'] = $msg['city'];
		$data['district'] = $msg['district'];
		$data['address'] = $msg['address'];
		$data['zipcode'] = $msg['zipcode'];
        $data['default'] = $msg['default'];
		$data['aid'] = $msg['aid'];
		$data['mid'] = session('mid');

        // 如果要将其设置为默认地址，就先将所有default字段变成0再更新
        $db = db('address');
        if( $data['default'] == 1 ){
            $db->strict('true')->where('mid','=',$data['mid'])->update( ['default'=>0] );
        }

		// 修改数据到数据库
		if( $db->strict('true')->update( $data ) ){

			$this->success( '修改成功！',url('member/address') );

		}else{
			
		    $this->error( '修改失败！' );

		}
        
    }

    /**
     * 异步删除地址
     */
    public function del(){

    	// 安全处理 
		if( !request()->isAjax() ){

			$this->error('您访问的页面不存在！');

		}
		
    	// 收集信息
    	$aid = input('id') + 0;

    	// 验证信息
    	if( !$aid ){

    		// 返回数据
    		echo json_encode(['status'=>false,'msg'=>'传递过来的是非法数据！']);

    	}

    	// 删除地址    	
    	if( db('address')->where('aid','=',$aid)->delete() ){

    		// 返回数据
    		echo json_encode(['status'=>true]);

    	}else{

    		// 返回数据
    		echo json_encode(['status'=>false]);

    	}

    	
    }

    /**
     * 异步获取子集城市
     */
    public function getChildCity(){

    	// 安全处理 
		if( !request()->isAjax() ){

			$this->error('您访问的页面不存在！');

		}
		
    	// 收集信息
    	$cid = input('id') + 0;

    	// 验证信息
    	if( !$cid ){

    		// 返回数据
    		echo json_encode(['status'=>false,'msg'=>'传递过来的是非法数据！']);

    	}

    	// 获取子集城市
    	$citys = db('city')->field('cid,city_name')->where(['pid'=>$cid,'status'=>1])->select();
    	
    	if( $citys ){

    		// 返回数据
    		echo json_encode(['status'=>true,'city'=>$citys]);

    	}else{

    		// 返回数据
    		echo json_encode(['status'=>false,'msg'=>'获取失败或没有子集城市！']);

    	}

    	
    }

    /**
     * 异步获取地址信息
     */
    public function getAddress(){

    	// 安全处理 
		if( !request()->isAjax() ){

			$this->error('您访问的页面不存在！');

		}
		
    	// 收集信息
    	$aid = input('id') + 0;

    	// 验证信息
    	if( !$aid ){

    		// 返回数据
    		echo json_encode(['status'=>false,'msg'=>'传递过来的是非法数据！']);

    	}

    	// 获取地址信息
    	$address = db('address')->where('aid','=',$aid)->find();
    	
    	if( $address ){

            $only = input('only');

            if( $only ){

                // 获取省市区id
                $cids = [ $address['province'],$address['city'],$address['district'] ];

                // 根据id获取省市区名称与id
                $city = db('city')->field('cid,city_name')->where( 'cid','in',$cids )->select(); 

                // 将对应的省市区信息添加到$address地址信息中
                foreach ($city as $v1) {

                    // 省
                    if( $address['province'] == $v1['cid'] ) {

                        $address['province'] =$v1['city_name'];

                    }
                    // 市
                    else if( $address['city'] == $v1['cid'] ) {

                        $address['city'] =$v1['city_name'];

                    }
                    // 区
                    else if( $address['district'] == $v1['cid'] ) {

                        $address['district'] = $v1['city_name'];

                    }
                    
                }

                // 返回数据
                echo json_encode(['status'=>true,'address'=>$address]);

            }else{

        		// 获取省市县
        		$pid = [ 0,$address['province'],$address['city'] ];//父id
           		$data = db('city')->field('cid,pid,city_name')->where(['pid'=>['in',$pid],'status'=>1])->select();

           		// 整理城市为省市县的结构
           		$citys = [];
           		foreach ($data as $k => $v) {

           			// 省
           			if( $v['pid'] == 0 ){

           				unset( $v['pid'] );

           				$citys['province'][] = $v;

           			}

           			// 市
           			else if( $v['pid'] == $address['province'] ){

           				unset( $v['pid'] );

           				$citys['city'][] = $v;

           			}

           			// 县
           			else if( $v['pid'] == $address['city'] ){

           				unset( $v['pid'] );

           				$citys['district'][] = $v;

           			}
           			
           		}
        		
        		// 返回数据
        		echo json_encode(['status'=>true,'address'=>$address,'city'=>$citys]);

            }

    	}else{

    		// 返回数据
    		echo json_encode(['status'=>false,'msg'=>'获取失败或没有子集城市！']);

    	}

    	
    }

    /**
     * 异步添加收货人地址
     */
    public function addAdress(){

        // 安全处理 
        if( !request()->isAjax() ){

            // 返回数据
            echo json_encode(['status'=>false,'msg'=>'您访问的页面不存在！']);
            die;

        }

        // 获取信息
        $msg = input('post.');
        
        // 验证信息
        $validate = new \think\Validate([
            'consignee'  => 'require', 
            'mobile' => '^1[34578]{1}[0-9]{9}$',
            'tel' => ['regex'=>'/^(\d{3}-\d{8}|\d{4}-\d{7})$/'],
            'email' => 'email',
            'province' => 'number',
            'city' => 'number',
            'district' => 'number',
            'zipcode' => '^[1-9][0-9]{5}$',
        ]);

        if (!$validate->check($msg)) {

            // 返回数据
            echo json_encode([ 'status'=>false,'msg'=>$validate->getError() ]);
            die;

        }

        // 拼凑数据
        $data['consignee'] = $msg['consignee'];
        $data['mobile'] = $msg['mobile'];
        $data['tel'] = $msg['tel'];
        $data['email'] = $msg['email'];
        $data['province'] = $msg['province'];
        $data['city'] = $msg['city'];
        $data['district'] = $msg['district'];
        $data['address'] = $msg['address'];
        $data['zipcode'] = $msg['zipcode'];
        $data['mid'] = session('mid');

        // 判断收货人是否已经存在
        $db = db('address');
        if( $db->where(['consignee'=>$data['consignee'],'mid'=>session('mid') ])->value('aid') ){

            // 返回数据
            echo json_encode([ 'status'=>false,'msg'=>'你已经添加过名为"'.$data['consignee'].'"的用户，请换一个名字！' ]);
            die;

        }

        // 添加数据到数据库
        if( $db->strict('true')->insert( $data ) ){

            // 返回数据
            echo json_encode([ 'status'=>true,'msg'=>'添加成功！','id'=>$db->getLastInsID() ]);

        }else{

            // 返回数据
            echo json_encode([ 'status'=>false,'msg'=>'添加失败！' ]);

        }
        
    }

    /**
     * 异步设为默认地址
     */
    public function setDefaultAdress(){

        // 安全处理 
        if( !request()->isAjax() ){

            // 返回数据
            echo json_encode(['status'=>false,'msg'=>'您访问的页面不存在！']);
            die;

        }

        // 获取信息
        $msg = input('post.');
        
        // 验证信息
        $validate = new \think\Validate([
            'consignee'  => 'require', 
            'mobile' => '^1[34578]{1}[0-9]{9}$',
            'tel' => ['regex'=>'/^(\d{3}-\d{8}|\d{4}-\d{7})$/'],
            'email' => 'email',
            'province' => 'number',
            'city' => 'number',
            'district' => 'number',
            'zipcode' => '^[1-9][0-9]{5}$',
        ]);

        if (!$validate->check($msg)) {

            // 返回数据
            echo json_encode([ 'status'=>false,'msg'=>$validate->getError() ]);
            die;

        }

        // 拼凑数据
        $data['consignee'] = $msg['consignee'];
        $data['mobile'] = $msg['mobile'];
        $data['tel'] = $msg['tel'];
        $data['email'] = $msg['email'];
        $data['province'] = $msg['province'];
        $data['city'] = $msg['city'];
        $data['district'] = $msg['district'];
        $data['address'] = $msg['address'];
        $data['zipcode'] = $msg['zipcode'];
        $data['mid'] = session('mid');

        // 判断收货人是否已经存在
        $db = db('address');
        if( $db->where('consignee','=',$data['consignee'])->value('aid') ){

            // 返回数据
            echo json_encode([ 'status'=>false,'msg'=>'你已经添加过名为"'.$data['consignee'].'"的用户，请换一个名字！' ]);
            die;

        }

        // 添加数据到数据库
        if( $db->strict('true')->insert( $data ) ){

            // 返回数据
            echo json_encode([ 'status'=>true,'msg'=>'添加成功！','id'=>$db->getLastInsID() ]);

        }else{

            // 返回数据
            echo json_encode([ 'status'=>false,'msg'=>'添加失败！' ]);

        }
        
    }




}